﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LPrisaMVC.Entities;
using LPrisaMVC.DAO;
using Microsoft.Practices.Unity;

namespace LPrisaMVC.BusinessLogic
{
    public class CompraBL:ICompraBL
    {
        [Dependency]
        public ICompraDAO compraDAO { get; set; }
        [Dependency]
        public IVentaDAO ventaDAO { get; set; }
        [Dependency]
        public IDetalleCompraDAO detalleDAO { get; set; }

        [Dependency]
        public IProductoDAO productoDAO { get; set; }

        [Dependency]
        public ICategoriaDAO categoriaDAO { get; set; }

        public List<COMPRA> GetAllFromCompra()
        {
            return compraDAO.GetAllFromCompra();
        }

        public List<COMPRA> GetFromCompraByProveedor(string descripcion)
        {
            return compraDAO.GetFromCompraByProveedor(descripcion);
        }

        public List<COMPRA> GetFromCompraByNroGuia(string descripcion)
        {
            return compraDAO.GetFromCompraByNroGuia(descripcion);
        }

        public COMPRA GetFromCompraById(int id)
        {
            return compraDAO.GetFromCompraById(id);
        }

        public void AddCompra(COMPRA compra)
        {
                foreach (var item in compra.DETALLECOMPRAs)
                {
                    var producto = productoDAO.GetFromProductoById(item.PRODUCTO.Id);
                    var categoria = categoriaDAO.GetFromCategoriaById(item.PRODUCTO.CategoriaId);
                    var actproducto = producto;
                    actproducto.CATEGORIA = categoria;
                    actproducto.Stock = producto.Stock + item.Cantidad;
                    productoDAO.UpdateProducto(actproducto);
                }
                compraDAO.AddCompra(compra);
        }


        public void UpdateCompra(COMPRA compra)
        {
            foreach (var item in compra.DETALLECOMPRAs)
            {
                var existeDetal = detalleDAO.GetFromProductoByDetalleCompraId(item.ProductoId, compra.Id);

                if (existeDetal != null)
                {
                    if (item.Cantidad != existeDetal.Cantidad)
                    {
                        var producto = productoDAO.GetFromProductoById(item.ProductoId);
                        var categoria = categoriaDAO.GetFromCategoriaById(item.PRODUCTO.CategoriaId);
                        var productoact = producto;
                        productoact.CATEGORIA = categoria;
                        productoact.Stock = producto.Stock - existeDetal.Cantidad + item.Cantidad;
                        productoDAO.UpdateProducto(productoact);
                    }
                }
                else
                {
                    var producto = productoDAO.GetFromProductoById(item.PRODUCTO.Id);
                    var categoria = categoriaDAO.GetFromCategoriaById(item.PRODUCTO.CategoriaId);
                    var actproducto = producto;
                    actproducto.CATEGORIA = categoria;
                    actproducto.Stock = producto.Stock + item.Cantidad;
                    productoDAO.UpdateProducto(actproducto);
                }
            }

            compraDAO.UpdateCompra(compra);
        }

        public void RemoveCompra(int id)
        {
            compraDAO.RemoveCompra(id);
        }
    }
}
